0. Blueprint
모든 블루프린트 XML 파일은 아래의 공통 규칙을 따릅니다.
<부모클래스이름>
<Configs>
<그룹이름 속성="값" 속성2="값" ... />
</Configs>
<Components>
<타입 Name="루트" Loc="float3" Rot="float3" Scale="float3" ...>
<타입 Name="자식" ... />
</타입>
</Components>
<Events>
<시스템이벤트>
<액션타입 속성="값" ... />
</시스템이벤트>
<커스텀이벤트>
<액션타입 속성="값" ... />
</커스텀이벤트>
</Events>
</부모클래스이름>
1. Configs
Configs는 액터의 특징을 정의하는 블록입니다.
-
모듈형 구조: 모든 속성을 적을 필요 없이, 필요한 기능을 가진 그룹(Movement, LifeCycle 등)만 선택적으로 작성합니다.
-
데이터 중심: 컴포넌트의 계층 구조와 상관없이 액터 전체의 동작 로직에 영향을 미칩니다.
-
실시간 적용: 여기서 정의된 초기값들은
OnSpawn시점에 투사체에 즉시 반영됩니다.
<Configs>
<Movement InitSpeed="(0, 0, 500)" MaxSpeed="1000" GravityScale="0" />
<LifeCycle Life="3" />
<Homing Homing="5.0" HomingTurnLimit="90" />
</Configs>
2. 컴포넌트
컴포넌트는 안쪽으로 중첩될수록 부모의 위치(Loc), 회전(Rot), 크기(Scale) 를 기준으로 배치됩니다.
- 부모 상속: 부모 메시가 움직이면 모든 자식/손자 메시가 함께 움직입니다.
- 중첩 규칙: 자식은 반드시 부모의 시작 태그(
<타입>)와 종료 태그(</타입>) 사이에 작성해야 합니다.
<Components>
<Mesh Name="동체" Asset="SM_Plane_Body">
<Mesh Name="왼쪽날개" Asset="SM_Wing" Loc="(-5, 0, 0)" />
<Mesh Name="오른쪽날개" Asset="SM_Wing" Loc="(5, 0, 0)" />
<Mesh Name="엔진" Asset="SM_Engine" Loc="(0, -3, 0)">
<Particle Name="추진불꽃" Asset="P_JetFire" />
</Mesh>
</Mesh>
</Components>
2.1. 기본 속성
| 속성 키 (Key) | 타입 | 기본값 | 설명 |
|---|---|---|---|
| Name | string |
컴포넌트의 고유 이름입니다. 에셋 내에서 중복될 수 없습니다. | |
| Loc | float3 |
(0 0 0) |
부모로부터의 상대적인 위치입니다. |
| Rot | float3 |
(0 0 0) |
부모로부터의 상대적인 회전값(Degree)입니다. |
| Scale | float3 |
(1 1 1) |
컴포넌트의 크기 배율입니다. |
| Anim | bool |
false | 컴포넌트에 애니메이션을 적용할 수 있게 됩니다. |
| Activate | bool |
true |
컴포넌트를 활성화 한 상태로 생성합니다. |
3. 이벤트 및 액션 설정 (Events)
이벤트는 특정 상황에서 실행되는 액션들의 리스트입니다.
3.1. 시스템 예약 이벤트
엔진에서 사전에 정의된 타이밍에 자동으로 실행됩니다.
이 이벤트는 On 접두사로 시작합니다.
정의하지 않은 시스템 예약 이벤트를 호출할 경우, 예외가 발생하게 됩니다.
3.2. 커스텀 이벤트
스크립트에서 정의하는 이벤트입니다. On접두사가 없는 경우 커스텀 이벤트로 간주됩니다.
다른 이벤트에서 <Event Name = "이름"> 으로 호출 할 수 있습니다.
3.3. 액션
이벤트 블록 내부에 적힌 액션들은 위에서 아래 방향으로 순차적으로 실행됩니다.
<Events>
<OnSpawn>
<Particle Asset="P_Explosion" />
<Event Name="CustomEvent" />
</OnSpawn>
<CustomEvent>
...
</CustomEvent>
</Events>
4. 데이터 타입 작성 규칙
XML 작성 시 아래 형식을 반드시 지켜야 오류가 발생하지 않습니다.
- 위치/회전/크기 (float3):
(x y z)형식을 사용합니다. (예:(10.5, 0, -5)) - 참/거짓 (bool):
true또는false를 입력합니다. - 숫자 (float): 일반 정수나 실수를 입력합니다. (예:
10,0.5)